package com.gz.controller;

import com.gz.dto.LabelInfoAddDto;
import com.gz.dto.LabelInfoDto;
import com.gz.dto.SubjectDto;
import com.gz.entity.LabelInfo;
import com.gz.entity.Subject;
import com.gz.service.LabelInfoService;
import com.gz.vo.R;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import java.util.List;
import javax.servlet.http.HttpServletRequest;

import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * 标签信息表(LabelInfo)表控制层
 *
 * @author makejava
 * @since 2024-02-23 10:55:54
 */
@RestController
@RequestMapping("labelInfo")
@Api(value = "标签信息控制层", tags = {"标签信息控制层"})
public class LabelInfoController {

  /**
   * 服务对象
   */
  @Autowired
  private LabelInfoService labelInfoService;

  /**
   * 分页查询
   *
   * @param dto 筛选条件
   * @return 查询结果
   */
  @ApiOperation(value = "分页查询")
  @PostMapping("/queryPage")
  public R queryByPage(@RequestBody LabelInfoDto dto, HttpServletRequest request) {
    return R.ok(labelInfoService.queryByPage(dto));
  }


  /**
   * 分页查询
   *
   * @param dto 筛选条件
   * @return 查询结果
   */
  @ApiOperation(value = "条件查询")
  @PostMapping("/queryAll")
  public R queryAll(@RequestBody LabelInfoDto dto, HttpServletRequest request) {
    return R.ok(labelInfoService.queryAll(dto));
  }
  /**
   * 分页查询
   *
   * @param dto 筛选条件
   * @return 查询结果
   */
  @ApiOperation(value = "条件查询下拉框")
  @PostMapping("/queryLabelSel")
  public R queryLabelSel(@RequestBody LabelInfoDto dto, HttpServletRequest request) {
    return R.ok(labelInfoService.queryLabelSel(dto));
  }

  /**
   * 通过主键查询单条数据
   *
   * @param id 主键
   * @return 单条数据
   */
  @ApiOperation(value = "主键查询")
  @GetMapping("/queryById")
  public R<LabelInfo> queryById(@RequestParam("id") Integer id) {
    return R.ok(labelInfoService.queryById(id));
  }

  /**
   * 新增数据
   *
   * @param labelInfo 实体
   * @return 新增结果
   */
  @ApiOperation(value = "新增数据")
  @PostMapping("/save")
  public R<LabelInfo> add(@RequestBody LabelInfoAddDto labelInfo) {
    /** 唯一性校验 */
    LabelInfoDto dto = new LabelInfoDto();
    dto.setLabelName(labelInfo.getLabelName());
    dto.setBlLevel(labelInfo.getLevel());
    dto.setBlGrade(labelInfo.getGrade());
    List<LabelInfo> labelInfos = labelInfoService.queryAll(dto);
    if(CollectionUtils.isNotEmpty(labelInfos)){
      return R.failure("该标签名称在对应科目-学层-年级下已经存在，请重新定义，标签名可自定义详细");
    }
    LabelInfo labelInfoPm = new LabelInfo();
    BeanUtils.copyProperties(dto,labelInfoPm);
    return R.ok(labelInfoService.insert(labelInfoPm));
  }

  /**
   * 编辑数据
   *
   * @param labelInfo 实体
   * @return 编辑结果
   */
  @ApiOperation(value = "编辑数据")
  @PostMapping("/update")
  public R<LabelInfo> edit(@RequestBody LabelInfo labelInfo) {
    return R.ok(labelInfoService.update(labelInfo));
  }

  /**
   * 批量编辑数据
   *
   * @param list
   * @return 编辑结果
   */
  @ApiOperation(value = "批量编辑数据")
  @PostMapping("/updateBatch")
  public R<?> editBatch(@RequestBody List<LabelInfo> list) {
    return R.ok(labelInfoService.updateBatch(list));
  }

  /**
   * 批量编辑数据
   *
   * @param list
   * @return 编辑结果
   */
  @ApiOperation(value = "批量新增数据")
  @PostMapping("/insertBatch")
  public R insertBatch(@RequestBody List<LabelInfo> list) {
    return R.ok(labelInfoService.insertBatch(list));
  }

  /**
   * 删除数据
   *
   * @param id 主键
   * @return 删除是否成功
   */
  @GetMapping("/deleteById")
  @ApiOperation(value = "删除数据")
  public R<Boolean> deleteById(@RequestParam("id") Integer id) {
    return R.ok(labelInfoService.deleteById(id));
  }

}

